/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package espe.ccsoft.dao;

import espe.ccsoft.models.Usuario;
import espe.ccsoft.orm.ORMBase;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.List;

/**
 *
 * @author misahaelfernandez
 */
public class UsuarioDao extends ORMBase<Usuario> {

    public final void insert(final Usuario usuario) throws SQLException, Exception {
        // Sentencia SQL para realizar la consulta a la BD:
        usuario.setFecha_creacion(new Timestamp(new java.util.Date().getTime()));
        usuario.setEstado(true);
        usuario.setNuevo(true);
        super.insertSql = "INSERT INTO USUARIO ("
                + "ROL_ID,"
                + "USU_CEDULA,"
                + "USU_NOMBRES,"
                + "USU_APELLIDOS,"
                + "USU_EMAIL,"
                + "USU_CONTRASENA,"
                + "USU_FECHACREACION,"
                + "USU_DESCRIPCION,"
                + "USU_ESTADO,"
                + "USU_NUEVO"
                + ") VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
        super.insert(new Object[]{
            usuario.getRol_id(),
            usuario.getCedula(),
            usuario.getNombres().toUpperCase(),
            usuario.getApellidos().toUpperCase(),
            usuario.getCorreo(),
            usuario.getContrasena(),
            usuario.getFecha_creacion(),
            usuario.getDescripcion(),
            usuario.isEstado(),
            usuario.isNuevo(),});
    }
    
    public final void update(final Usuario usuario) throws SQLException, Exception {
        // Sentencia SQL para realizar la consulta a la BD:
        super.updateSql = "UPDATE USUARIO SET "
                + "ROL_ID=?, "
                + "USU_CEDULA=?, "
                + "USU_NOMBRES=?, "
                + "USU_APELLIDOS=?, "
                + "USU_EMAIL=?, "
                + "USU_CONTRASENA=?, "
                + "USU_DESCRIPCION=?, "
                + "USU_ESTADO=?, "
                + "USU_NUEVO=? "
                + "WHERE USU_ID=?";
        super.update(new Object[]{
            usuario.getRol_id(),
            usuario.getCedula(),
            usuario.getNombres(),
            usuario.getApellidos(),
            usuario.getCorreo(),
            usuario.getContrasena(),
            usuario.getDescripcion(),
            usuario.isEstado(),
            usuario.isNuevo(),
            usuario.getId(),});
    }
    
    public final void updatePassword(final Usuario usuario) throws Exception{
        super.updateSql = "UPDATE USUARIO SET "
                + "USU_CONTRASENA=?, "
                + "USU_NUEVO=? "
                + "WHERE USU_ID=?";
        super.update(new Object[]{
            usuario.getContrasena(),
            usuario.isNuevo(),
            usuario.getId(),});
    }

    public final Usuario findByPK(final Integer id_usuario) throws SQLException, Exception {
        // Sentencia SQL para realizar la consulta a la BD:
        super.findByPkSql = "select * FROM USUARIO"
                + " WHERE USU_ID=?";
        return super.findByPK(new Object[]{
            id_usuario,});
    }

    public final Usuario findByCorreo(final String correo) throws SQLException, Exception {
        super.findByPkSql = "select * FROM USUARIO"
                + " WHERE USU_EMAIL=? ";
        return super.findByPK(new Object[]{
            correo,});
    }
    
    public final Usuario findByNombre(final String nombre, final String apellido, 
            final String cedula, final String correo) throws SQLException, Exception {
        // Sentencia SQL para realizar la consulta a la BD:
        super.findSomeSql = "SELECT * FROM USUARIO"
                + " WHERE (USU_NOMBRES = ? OR USU_APELLIDOS = ? OR USU_CEDULA = ? "
                + "OR USU_CORREO = ?) AND "
                + "USU_ESTADO=1";
        return super.findByPK(new Object[]{
            nombre,
            apellido,
            cedula,
            correo,});
    }
    
    @Override
    public final List<Usuario> findAll() throws SQLException, Exception {
        super.findAllSql = "select * FROM USUARIO";
        return super.findAll();
    }

    @Override
    protected Usuario crearObjeto(final ResultSet rs) throws SQLException {
        Usuario usuario = new Usuario();
        usuario.setId(rs.getInt("USU_ID"));
        usuario.setRol_id(rs.getInt("ROL_ID"));
        usuario.setCedula(rs.getString("USU_CEDULA"));
        usuario.setNombres(rs.getString("USU_NOMBRES"));
        usuario.setApellidos(rs.getString("USU_APELLIDOS"));
        usuario.setCorreo(rs.getString("USU_EMAIL"));
        usuario.setContrasena(rs.getString("USU_CONTRASENA"));
        usuario.setFecha_creacion(rs.getTimestamp("USU_FECHACREACION"));
        usuario.setEstado(rs.getBoolean("USU_ESTADO"));
        usuario.setNuevo(rs.getBoolean("USU_NUEVO"));
        return usuario;
    }

}
